package entity

import (
	"encoding/json"
	"time"
)

// APICallRecord 记录API调用信息
// 用于记录每次API调用的详细信息，包括调用时间、耗时、状态、错误信息、请求和响应数据，便于追踪和分析API使用情况
type APICallRecord struct {
	ID           string    `json:"id"`            // 调用记录唯一标识
	APIID        string    `json:"api_id"`        // 被调用API的唯一标识
	StartTime    time.Time `json:"start_time"`    // 调用开始时间
	EndTime      time.Time `json:"end_time"`      // 调用结束时间
	Duration     int64     `json:"duration"`      // 调用耗时（毫秒）
	Status       string    `json:"status"`        // 调用状态（success/error）
	Error        string    `json:"error"`         // 错误信息
	RequestData  string    `json:"request_data"`  // 请求数据（JSON格式）
	ResponseData string    `json:"response_data"` // 响应数据（JSON格式）
}

// ServiceStats 服务统计信息
// 用于统计服务的调用次数、成功次数、错误次数、平均响应时间等，便于服务性能分析
type ServiceStats struct {
	ID              string    `json:"id"`                // 统计记录唯一标识
	ServiceID       string    `json:"service_id"`        // 服务唯一标识
	CallCount       int       `json:"call_count"`        // 调用总次数
	SuccessCount    int       `json:"success_count"`     // 成功调用次数
	ErrorCount      int       `json:"error_count"`       // 错误调用次数
	AvgResponseTime float64   `json:"avg_response_time"` // 平均响应时间（毫秒）
	LastCalledAt    time.Time `json:"last_called_at"`    // 最后一次调用时间
	CreatedAt       time.Time `json:"created_at"`        // 统计记录创建时间
	UpdatedAt       time.Time `json:"updated_at"`        // 统计记录更新时间
}

// APICallLog API调用日志
// 用于记录API调用的详细日志，包括响应时间、错误信息、请求和响应数据，便于问题追踪和性能分析
type APICallLog struct {
	ID           string          `json:"id" gorm:"primaryKey;column:id"`            // 日志唯一标识
	APIID        string          `json:"api_id" gorm:"column:api_id"`               // 被调用API的唯一标识
	UserID       string          `json:"user_id" gorm:"column:user_id"`             // 用户ID
	CreatedAt    time.Time       `json:"created_at" gorm:"column:created_at"`       // 日志创建时间
	Status       string          `json:"status" gorm:"column:status"`               // 调用状态（success/error）
	ResponseTime float64         `json:"response_time" gorm:"column:response_time"` // 响应时间（毫秒）
	ErrorMessage string          `json:"error_message" gorm:"column:error_message"` // 错误信息
	RequestData  json.RawMessage `json:"request_data" gorm:"column:request_data"`   // 请求数据（JSON格式）
	ResponseData json.RawMessage `json:"response_data" gorm:"column:response_data"` // 响应数据（JSON格式）
}

// DatabaseConnectionStats 数据库连接统计
// 用于统计数据库连接的状态、连接数、错误数、平均响应时间等，便于监控数据库连接健康状况
type DatabaseConnectionStats struct {
	ID              string    `json:"id"`                // 统计记录唯一标识
	Name            string    `json:"name"`              // 数据库连接名称
	DBType          string    `json:"db_type"`           // 数据库类型
	Status          string    `json:"status"`            // 连接状态（active/inactive）
	CreatedAt       time.Time `json:"created_at"`        // 统计记录创建时间
	UpdatedAt       time.Time `json:"updated_at"`        // 统计记录更新时间
	LastUsedAt      time.Time `json:"last_used_at"`      // 最后一次使用时间
	ConnectionCount int       `json:"connection_count"`  // 当前连接数
	ErrorCount      int       `json:"error_count"`       // 错误数
	AvgResponseTime float64   `json:"avg_response_time"` // 平均响应时间（毫秒）
}

// ServiceCallLog 服务调用日志
// 用于记录服务调用的详细日志，包括调用时间、耗时、状态、错误信息、请求和响应数据，便于服务追踪和问题排查
type ServiceCallLog struct {
	ID           string          `json:"id"`            // 日志唯一标识
	ServiceID    string          `json:"service_id"`    // 服务唯一标识
	CreatedAt    time.Time       `json:"created_at"`    // 日志创建时间
	Status       string          `json:"status"`        // 调用状态（success/error）
	Duration     float64         `json:"duration"`      // 调用耗时（毫秒）
	ErrorMessage string          `json:"error_message"` // 错误信息
	RequestData  json.RawMessage `json:"request_data"`  // 请求数据（JSON格式）
	ResponseData json.RawMessage `json:"response_data"` // 响应数据（JSON格式）
}
